[ELK] Elasticsearch

鼠年全馬鐵人挑戰 - WEEK 16

前言

繼續上一篇的ELK筆記,本篇主要近一步筆記ELK中的Elasticsearch

Elasticesearch

Elasticesearch是一個基於RESTful API的架構設計,使用者所有的操作都可以透過HTTP Method如:GET/POST/PUT/DELETE來完成。
可以簡單的把它定義成分散式叢集架構的非關聯式資料庫,回顧一下上一篇所提到的幾個重要名詞,可以簡單對照資料庫

  • node : server
  • index : database
  • type : table
  • fields : columns
  • documents : rows

API幾個重要行為

  • index: 針對整個document,既可以新增又可以更新;
  • create:只是新增操作,可以用PUT指定ID,或POST不指定ID;
  • update:指的是部分更新,官方只是說用POST,請求body裡用script或doc裡包含document要更新的部分;
  • delete和read:就是發deleteget這兩種HTTP Method了

常用的指令

進入Kibana的管理介面中,左側的導覽列找到一個名為Dev Tools的鈕,點擊之後就可以開始下指令囉!

查看cluster狀態

如果想查看cluster的當前狀態,可以在Kibana的管理介面執行下方指令

1
GET _cluster/health

會回傳一個JSON格式的資料

更多cluster health可參考官方文件
或是執行下方指令可以查看整個cluster的狀態

1
GET _cluster/state

查看node狀態

如果想查看node的狀態

1
GET _cat/nodes?v


在預設情況下只會有一個Node
更多用法可以參考官方文件: Nodes info APIcat nodes API

查看Indice的相關訊息

1
GET _cat/indices?v

上圖中的欄位細節

  • health: 代表資料點的健康狀態,red表資料有缺損無法使用;yellow 表資料只有一份沒有shard,若單一結點壞損無法進行回復;green表資料有 shard 的備援若單點損壞依然可以正常運行檢索
  • status : 是否啟用
  • index : index 檢索名稱
  • uuid : 唯一識別 key
  • pri : 主要 shards 數量
  • rep : 副本 shards 數量
  • docs.count : index 下總紀錄筆數
  • docs.deleted : 資料被異動的次數
  • store.size : 儲存主要資料所佔用的空間
  • pri.store.size : 儲存副本所佔空間

剛才上述的指令都是在Kibana介面上去操作,不過其實也可以透過cURL的方式來取得回傳資料

到該行指令右邊有個板手的icon,點擊後會跳出下拉式選單,選擇Copy cURL,接著開啟終端機,貼上剛剛的cURL

其他補充

shards

Elasticsearch可以把一個完整的Index分成多個切片(slice),每個切片(slice)稱作shard,好處是可以把一個大的Index拆分成多個,分布到不同的Node(節點)上,構成分布式搜尋,加快處理速度,透過水平擴展(horizontally scale)增加資料儲存的總量。

不過需要注意的是:

  • 切分多個shard是在Index的層級上運作。也就是說,slice的數量只能在Index創建前指定,如果Index創建後不能更改。
  • 每個shard可看作是一個獨立的Index

shard分兩種類型

  • Primary shard: 每個Document都存在一個Primary shard。搜尋document時,會先在Primary shard上加上索引值,然後在此shard的所有副本(replicas)上加上索引值。索引(Index)可以包含一個或多個Primary shard(預設值為5)。建好Index後,便無法更改Index中的Primary shard數量。
  • Replica shard: 每個Primary shard可擁有零到多個Replica shard。有兩個目的: 增加系統Crash的容忍度;如果Primary shard故障,可以將Replica shard變更為Primary shard。預設情況下,每個Primary shard都有一個Replica shard,但可以在現有Index上動態修改Replica shard數量

replicas

代表Index副本,白話一點就是備份,而Elasticsearch可以建立多個Index的副本,Elasticsearch預設就會啟用replicas
值得注意的是:replica的數量是可以動態修改的
假設一種情況,若今天在其中一台Node server壞掉時,啟用備份的資料,用最快的速度還原原始資料,這是一種在災難復原上常用的手段。
副本的作用一是提高系統的容錯性,當個某個Node或某個Shard損壞或遺失時可以從副本中恢復。二是提高Elasticsearch的查詢效率,Elasticsearch會自動對搜尋要求進行負載平衡。

replicas相關運作

  • Index層級進行配置。在建立Index時,可選擇每個shard可作需要多少個replica
  • replicas是根據Index中的shard複製的,複製出新的replica shard
  • 被複製的shard被稱作primary shard
  • primary shardreplica shard的集合稱作replication group

來看張範例架構圖

上面的架構圖將一個Index分割出兩個primary shards,分別做兩個replica shard,而primary shards與其衍生出來的replica shards形成一個replication group,故此Index涵蓋兩組replication group
接著來看replica shard是如何設計來做資料還原

上圖可知,replica shard不會被放在原始的primary shard,而是放在不同個Node裡面,如primary shard ANode A其產生的兩個replica shards放在Node B,故Node A有天突然無法運作時,Node B中至少還有一個replica shards可以做資料還原。

參閱

Comments